/**
 * 版权所有(C)，上海海鼎信息工程股份有限公司，2009，所有权利保留。
 * 
 * 项目名：	rumba-web
 * 文件名：	ImageLocation.java
 * 模块说明：	
 * 修改历史：
 * Jan 8, 2009 - lxm - 创建。
 */
package com.hd123.rumba.gwt.widget2.client.misc;

import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.ui.Image;

/**
 * 图片资源显示定位器。其中包含了图片资源的url以及可见部分的矩形区域。
 * 
 * @author lxm
 * 
 */
public class RImageLocation {
  
  public static final String URL_TRANSPARENT = "images/transparent.png";
  public static final RImageLocation TRANSPARENT_SMALL = new RImageLocation(URL_TRANSPARENT, 0, 0, 16, 16);
  public static final RImageLocation TRANSPARENT_BIG = new RImageLocation(URL_TRANSPARENT, 0, 0, 24, 24);
  public static final RImageLocation TRANSPARENT_BIGGER = new RImageLocation(URL_TRANSPARENT, 0, 0, 32, 32);
  public static final RImageLocation TRANSPARENT_BIGGEST = new RImageLocation(URL_TRANSPARENT, 0, 0, 48, 48);

  /**
   * 创建对象实例。
   */
  public RImageLocation() {
    super();
  }

  /**
   * 创建对象实例。
   * 
   * @param url
   *            指定取得图片资源的url地址。
   */
  public RImageLocation(String url) {
    this();
    this.url = url;
  }

  /**
   * 创建对象实例。
   * 
   * @param url
   *            指定取得图片资源的url地址。
   * @param left
   *            指定图片显示矩形的左边坐标，单位像素。
   * @param top
   *            指定图片显示矩形的上边坐标，单位像素。
   * @param width
   *            指定图片显示矩形的宽度，单位像素。
   * @param height
   *            指定图片显示矩形的高度，单位像素。
   */
  public RImageLocation(String url, int left, int top, int width, int height) {
    this(url);
    this.left = new Integer(left);
    this.top = new Integer(top);
    this.width = new Integer(width);
    this.height = new Integer(height);
  }

  private String url;
  private Integer left;
  private Integer top;
  private Integer width;
  private Integer height;

  /** 图片资源对应的url。 */
  public String getUrl() {
    return url;
  }

  public void setUrl(String url) {
    this.url = url;
  }

  /** 图片显示矩形区域的左边坐标，单位像素。 */
  public Integer getLeft() {
    return left;
  }

  public void setLeft(Integer left) {
    this.left = left;
  }

  /** 图片显示矩形区域的上边坐标，单位像素。 */
  public Integer getTop() {
    return top;
  }

  public void setTop(Integer top) {
    this.top = top;
  }

  /** 图片显示矩形区域的宽度，单位像素。 */
  public Integer getWidth() {
    return width;
  }

  public void setWidth(Integer width) {
    this.width = width;
  }

  /** 图片显示矩形区域的高度，单位像素。 */
  public Integer getHeight() {
    return height;
  }

  public void setHeight(Integer height) {
    this.height = height;
  }

  /**
   * 创建一个Image对象。
   * 
   * @return 返回创建的Image对象。
   */
  public Image createImage() {
    Image img = new Image();
    applyToImage(img);
    return img;
  }

  /**
   * 将对象应用到指定的Image对象中。
   * 
   * @param img
   *            允许传入null，将不作任何事。
   */
  public void applyToImage(Image img) {
    if (url != null)
      img.setUrl(url);
    if (left != null && top != null && width != null && height != null)
      img.setVisibleRect(left.intValue(), top.intValue(), width.intValue(), height.intValue());
  }

  /**
   * 将指定的图片资源预先下载到浏览器。
   */
  public void prefetch() {
    Image.prefetch(url);
  }

  /**
   * 
   * 将其转换为类似“&lt;img ...&gt;”的HTML。
   * 
   * @return
   */
  public String toHTML() {
    StringBuffer sb = new StringBuffer();
    sb.append("<img src='");
    sb.append(url);
    sb.append("' align=absmiddle");
    if (left != null && top != null && width != null && height != null) {
      sb.append(" width=" + (left.intValue() + width.intValue()) + "px");
      sb.append(" height=" + (top.intValue() + height.intValue()) + "px");
      sb.append(" style='");
      sb.append("margin-top:-" + top.intValue() + "px;");
      sb.append("margin-left:-" + left.intValue() + "px;");
      sb.append("FILTER: progid:DXImageTransform.Microsoft.AlphaImageLoader(");
      sb.append("src='" + GWT.getModuleBaseURL() + url + "',sizingMethod='crop'");
      sb.append(");");
      sb.append("'");
    }
    sb.append(">");
    return sb.toString();
  }
  
  static {
    TRANSPARENT_BIGGEST.prefetch();
  }

}
